package com.jk.vehicle.core.service;

import com.github.pagehelper.PageInfo;
import com.jk.vehicle.core.entity.BaseEntity;
import tk.mybatis.mapper.entity.Condition;

import java.util.List;

/**
 * 基础通用service
 *
 * @author KangJian
 * @date 2018/7/18
 */
public interface Service<T extends BaseEntity> {
	/**
	 * 新增对象
	 *
	 * @param model
	 */
	void save(T model, String dsName);

	/**
	 * 批量新增对象
	 *
	 * @param models
	 */
	void save(List<T> models, String dsName);

	/**
	 * 主键删除（逻辑删除）
	 *
	 * @param id
	 */
	void deleteById(Long id, String dsName);


	/**
	 * 主键删除（物理删除）
	 *
	 * @param id
	 */
	void deleteByIdPermanent(Long id, String dsName);

	/**
	 * 批量主键删除（逻辑删除） eg：ids -> “1,2,3,4”
	 *
	 * @param ids
	 */
	void deleteByIds(String ids, String dsName);

	/**
	 * 批量主键删除（物理删除） eg：ids -> “1,2,3,4”
	 *
	 * @param ids
	 */
	void deleteByIdsPermanent(String ids, String dsName);

	/**
	 * 更新对象,null值不会被更新
	 * @param model
	 */
	void update(T model, String dsName);

	/**
	 * 更新对象,严格模式，null值全部会被更新
	 * @param model
	 */
	void updateStrict(T model, String dsName);

	/**
	 * 通过主键查找
	 *
	 * @param id
	 * @return
	 */
	T findById(Long id, String dsName);

	/**
	 * 通过多个主键查找 eg：ids -> “1,2,3,4”
	 * @param ids
	 * @return
	 */
	List<T> findByIds(String ids, String dsName);

	/**
	 * 通过条件查找
	 * @param condition
	 * @return
	 */
	List<T> findByCondition(Condition condition, String dsName);

	/**
	 * 通过条件计数
	 * @param condition
	 * @return
	 */
	Integer countByCondition(Condition condition, String dsName);

	/**
	 * 分页
	 * @param page
	 * @param size
	 * @param condition
	 * @return
	 */
	PageInfo page(Integer page, Integer size, Condition condition, String dsName);

	void deleteByCondition(Condition condition, String dsName);



}
